﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bibilioteca.DataAccess;
using Bibilioteca.Models;
using System.Data;

namespace Bibilioteca.Dominio
{
    public class NegocioAutores
    {

        private AutoresDao autoresDao;

        public NegocioAutores()
        {
            autoresDao = new AutoresDao();
        }

        /*
         * Genera a partir de un dataTable un LinkedList.
         * Esto es simplemente porque desde la vista no se puede iterar
         * sobre un datatable, se necesita una coleccion de autores.
         */
        private LinkedList<Autor> generarListaAutores(DataTable tabla)
        {
            LinkedList<Autor> retorno = new LinkedList<Autor>();
            foreach (DataRow row in tabla.Rows)
            {
                Autor s = new Autor((int)row["autor_id"], (string)row["autor_nombre"], (string)row["autor_apellido"]);
                retorno.AddLast(s);
            }
            return retorno;
        }

        /*
         * Retorna una lista enlazada de todos los autores en la BD.
         */
        public LinkedList<Autor> todosLosAutores()
        {
            return generarListaAutores(autoresDao.todosLosAutores());
        }

        /*
         * Retorna una lista enlazada de todos los autores de un material dado.
         */
        public LinkedList<Autor> GetAutoresDeMaterial(string id)
        {
            return generarListaAutores(autoresDao.autoresDeMaterial(id));
        }

        
        /*
         * Dado un numero de autor lo busca en la BD y lo retorna.
         */
        public Autor GetAutorNumero(string id)
        {
            autoresDao.paramID = Convert.ToInt32(id.Trim());
            DataTable autorTable = autoresDao.GetAutorNumero();
            foreach (DataRow row in autorTable.Rows)
            {
                Autor s = new Autor((int)row["autor_id"], (string)row["autor_nombre"], (string)row["autor_apellido"]);
                return s;
            }
            return new Autor(0, "No existe", "No existe");
        }

        public void modificarAutor(Autor autor)
        {
            autoresDao.paramID = autor.Id;
            autoresDao.nombre = autor.Nombre;
            autoresDao.apellido = autor.Apellido;
            
            if(autor != null && autor.Id != 0)
                autoresDao.modificarAutor();
        }

        public void insertarAutor(Autor autor)
        {
            autoresDao.nombre = autor.Nombre;
            autoresDao.apellido = autor.Apellido;
            
            autoresDao.insertarAutor();
        }

        public void eliminarAutor(int id)
        {
            autoresDao.paramID = id;
            if (id != 0)
                autoresDao.eliminarAutor();
        }

    }
}